Va

您所在的位置:网站首页 va_start 头文件 Va

Va

2024-01-15 15:23| 来源: 网络整理| 查看: 265

void simple_va_fun(int i, ...) { va_list arg_ptr; char *s=NULL; va_start(arg_ptr, i); s=va_arg(arg_ptr, char*); va_end(arg_ptr); printf("%d %s\n", i, s); return; }

    可变参数为char*型,当我们忘记用两个参数来调用该函数时,就会出现

  core   dump(Unix)   或者页面非法的错误(window平台).但也有可能不出

  错,但错误却是难以发现,不利于我们写出高质量的程序. 

  以下提一下va系列宏的兼容性.   

  System   V   Unix把va_start定义为只有一个参数的宏:  

  va_start(va_list   arg_ptr);   

  而ANSI   C则定义为:     

  va_start(va_list   arg_ptr,   prev_param);  

  如果我们要用system   V的定义,应该用vararg.h头文件中所定义的   

  宏,ANSI   C的宏跟system   V的宏是不兼容的,我们一般都用ANSI   C,所以  

  用ANSI   C的定义就够了,也便于程序的移植.               小结:    

  可变参数的函数原理其实很简单,而va系列是以宏定义来定义的,实    

  现跟堆栈相关.我们写一个可变函数的C函数时,有利也有弊,所以在不必 

  要的场合,我们无需用到可变参数.如果在C++里,我们应该利用C++的多 

  态性来实现可变参数的功能,尽量避免用C语言的方式来实现. 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3